//  [9/16/2013 OMEGA] created


#include <QtWidgets/QUndoCommand>
#include "DuelAssECommon.h"
#include "DuelAssECommand.h"
#include "DuelAssEProject.h"
#include "DuelAssEWorkbench.h"
#include "DuelAssEEditArchiveOfGroupCmd.h"
#include "DuelAssEEditResourceOfGroupCmd.h"

// 
// DAssEAttachArchiveToGroupCmd::DAssEAttachArchiveToGroupCmd( DuelAssetEditor* parent, const QString& grpName, const QStringList& addedArchs ) :
// 	mParent(parent),
// 	mTargetGroupName(grpName),
// 	mAddedArchs(addedArchs)
// {
// 	setText(QObject::tr("Edit ").append(grpName));
// }

DAssEAttachArchiveToGroupCmd::DAssEAttachArchiveToGroupCmd( DAssEWorkbench* workbench, QUndoCommand* parent, const QString& grpName, const QStringList& addedArchs ) :
	DAssECommand(workbench, parent),
	mTargetGroupName(grpName),
	mAddedArchs(addedArchs)
{
	setText(QObject::tr("Edit ").append(grpName));
}

DAssEAttachArchiveToGroupCmd::~DAssEAttachArchiveToGroupCmd()
{

}

void DAssEAttachArchiveToGroupCmd::redo()
{
// 	DAssEProject* proj = mParent->getCurrentProject();
// 	DAssEGroup* grp = proj->getGroup(mTargetGroupName);
// 	foreach(const QString& archName, mAddedArchs)
// 	{
// 		DAssEArchive* arch = proj->getArchive(archName);
// 		if (arch == NULL)
// 		{
// 			continue;
// 		}
// 		if (!grp->isArchiveAttached(arch));
// 		{
// 			grp->attachArchive(arch);
// 			emit mParent->archiveAttachedToGroup(grp, arch);
// 		}
// 	}
	DAssECommand::redo();
}

void DAssEAttachArchiveToGroupCmd::undo()
{
// 	DAssEProject* proj = mParent->getCurrentProject();
// 	DAssEGroup* grp = proj->getGroup(mTargetGroupName);
// 	foreach(const QString& archName, mAddedArchs)
// 	{
// 		DAssEArchive* arch = proj->getArchive(archName);
// 		if (arch == NULL)
// 		{
// 			continue;
// 		}
// 		if (grp->isArchiveAttached(arch));
// 		{
// 			emit mParent->archiveDetachedFromGroup(grp, arch);
// 			grp->detachArchive(arch);
// 		}
// 	}
	DAssECommand::undo();
}

// 
// DAssEDetachArchiveFromGroupCmd::DAssEDetachArchiveFromGroupCmd( DuelAssetEditor* parent, const QString& grpName, const QStringList& removedArchs ) :
// 	mParent(parent),
// 	mTargetGroupName(grpName),
// 	mRemovedArchs(removedArchs)
// {
// }

DAssEDetachArchiveFromGroupCmd::DAssEDetachArchiveFromGroupCmd( DAssEWorkbench* workbench, QUndoCommand* parent, const QString& grpName, const QStringList& removedArchs ) :
	DAssECommand(workbench, parent),
	mTargetGroupName(grpName),
	mRemovedArchs(removedArchs)
{
	setText(QObject::tr("Edit group ").append(grpName));
}

DAssEDetachArchiveFromGroupCmd::~DAssEDetachArchiveFromGroupCmd()
{
	/*qDeleteAll(mUndeclareResCmdMap);*/
}


void DAssEDetachArchiveFromGroupCmd::redo()
{
// 	DAssEProject* proj = mParent->getCurrentProject();
// 	DAssEGroup* grp = proj->getGroup(mTargetGroupName);
// 	foreach(const QString& archName, mRemovedArchs)
// 	{
// 		DAssEArchive* arch = proj->getArchive(archName);
// 		if (arch == NULL)
// 		{
// 			continue;
// 		}
// 		if (grp->isArchiveAttached(arch));
// 		{
// 			QStringList relatedResList;
// 			ResourceItemList* itmList = grp->getDeclaredResources();
// 			foreach(DAssEResourceItem* itm, *itmList)
// 			{
// 				if (itm->getParentArchive() == arch)
// 				{
// 					relatedResList.push_back(itm->getName());
// 				}
// 			}
// 			if (!relatedResList.empty())
// 			{
// 				QUndoCommand* undeclareResCmd = new DAssEUndeclareResourceFromGroupCmd(mParent, grp->getName(), archName, relatedResList);
// 				undeclareResCmd->redo();
// 				mUndeclareResCmdMap.insert(archName, undeclareResCmd);
// 			}
// 			emit mParent->archiveDetachedFromGroup(grp, arch);
// 			grp->detachArchive(arch);
// 		}
// 	}
	DAssECommand::redo();
}

void DAssEDetachArchiveFromGroupCmd::undo()
{
// 	DAssEProject* proj = mParent->getCurrentProject();
// 	DAssEGroup* grp = proj->getGroup(mTargetGroupName);
// 	foreach(const QString& archName, mRemovedArchs)
// 	{
// 		DAssEArchive* arch = proj->getArchive(archName);
// 		if (arch == NULL)
// 		{
// 			continue;
// 		}
// 		if (!grp->isArchiveAttached(arch));
// 		{
// 			grp->attachArchive(arch);
// 			emit mParent->archiveAttachedToGroup(grp, arch);
// 			QMap<QString, QUndoCommand*>::iterator i = mUndeclareResCmdMap.find(archName);
// 			if (i != mUndeclareResCmdMap.end())
// 			{
// 				i.value()->undo();
// 				delete i.value();
// 				mUndeclareResCmdMap.erase(i);
// 			}
// 		}
// 	}
	DAssECommand::undo();
}
// 
// DAssEEditArchiveOfGroupCmd::DAssEEditArchiveOfGroupCmd( DuelAssetEditor* parent, const QString& grpName, const QStringList& addedArchs, const QStringList& removedArchs ) :
// 	mAddCmd(parent, grpName, addedArchs),
// 	mRemoveCmd(parent, grpName, removedArchs)
// {
// 	setText(QObject::tr("Edit group ").append(grpName));
// }
// 
// void DAssEEditArchiveOfGroupCmd::redo()
// {
// 	mAddCmd.redo();
// 	mRemoveCmd.redo();
// }
// 
// void DAssEEditArchiveOfGroupCmd::undo()
// {
// 	mRemoveCmd.undo();
// 	mAddCmd.undo();
// }
